package com.ruoyi.system.service;

import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.system.domain.EquipmentManagement;
import com.ruoyi.system.domain.RealtimePositioning;
import com.ruoyi.system.domain.request.equipment.BatchUpdateParam;
import com.ruoyi.system.domain.vo.bigscreen.DeviceDriver;
import com.ruoyi.system.domain.vo.common.ComDvoName;
import com.ruoyi.system.domain.vo.equipment.EquipmentInfo;
import com.ruoyi.system.domain.vo.equipment.NumberPlateDeviceId;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

/**
 * 设备管理Service接口
 * 
 * @author wp
 * @date 2023-08-10
 */
public interface IEquipmentManagementService extends IService<EquipmentManagement> {

    public List<EquipmentInfo> selectList(EquipmentInfo param);

    public List<EquipmentInfo> selectListBaseInfo(EquipmentInfo param);

    public EquipmentInfo selectOne(Long id);

    public void insertEquipment(EquipmentInfo param);

    public void updateEquipment(EquipmentInfo param);

    public void deleteEquipment(Long[] ids);

    public void deleteEquipment(Long id);

    /**
     * 通过设备号查询设备
     * @param deviceId
     * @return
     */
    EquipmentManagement getByDeviceId(String deviceId);

    /**
     * 通过设备号查询车辆信息
     */
    RealtimePositioning getVehiclePositionByDeviceId(String deviceId);

    /**
     * 根据设备号获取车牌号和设备号
     *
     */
    List<NumberPlateDeviceId> listNumberPlateByDeviceId(String deviceId);


    /**
     * 设备自检
     * @param ids
     * @return
     */
    int equipmentCheck(List<Long> ids);


    /**
     * 批量修改设备及绑定监管对象、负责人所属公司
     */
    void batchUpdateCompany(BatchUpdateParam param);

    /**
     * 设备批量导入
     * @param file
     * @param companyId
     */
    void importData(MultipartFile file, Long companyId) throws Exception;

    /**
     * 设备号重复校验
     * @param deviceId
     * @param id
     * @return
     */
    public void checkExistDeviceId(String deviceId, Long id);

    /**
     * SIM卡重复校验
     * @param iccid
     * @param id
     * @return
     */
    public void checkExistSimId(String iccid, Long id);

    /**
     * 查询设备名称和公司名称
     */
    public List<ComDvoName> selectDeviceAndCompanyName(List<String> deviceIds);

    /**
     * 查询设备名称和公司名称
     */
    public ComDvoName selectDeviceAndCompanyName(String deviceId);

    /**
     * 查询负责人信息
     * @param companyIds
     * @return
     */
    public List<DeviceDriver> listDriver(List<Long> companyIds);

    /**
     * 查询设备名称和设备号
     */
    public List<Map<String, Object>> listNumberPlateDeviceIdByName(JSONObject param);

    /**
     * 查询监管类型列表
     * @return
     */
    public List<Integer> listObjType(JSONObject param);
}
